home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / games.arc / SIMULTAN.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1980-01-01  |  2.8 KB  |  145 lines

  1. 10  ' ************************************
  2. 20  ' **     SIMULTANEOUS EQUATIONS     **
  3. 30  ' ************************************
  4. 40  '
  5. 50  CLEAR
  6. 60  SCREEN 0,0,0
  7. 70  KEY OFF
  8. 80  CLS
  9. 90  OPTION BASE 1
  10. 100  SIZE = 25
  11. 110  DIM MAT(SIZE,SIZE+1),VAR$(SIZE)
  12. 120  LOCATE 1,22
  13. 130  PRINT "* * *  Simultaneous Equations  * * *"
  14. 140  LOCATE 4,1
  15. 150  PRINT "Type in the equations ...
  16. 160  PRINT
  17. 170  LINE INPUT A$
  18. 180  IF A$ = "" THEN 580
  19. 190  GOSUB 1180
  20. 200  GOSUB 1290
  21. 210  EQ = EQ + 1
  22. 220  FOR I = 1 TO LEN(A$)
  23. 230  B$ = MID$(A$,I,1)
  24. 240  C$ = MID$(A$,I+1,1)
  25. 250  D$ = D$ + B$
  26. 260  IF B$ >= "A" AND B$ <= "Z" AND (C$ < "A" OR C$ > "Z") THEN GOSUB 300
  27. 270  NEXT I
  28. 280  GOSUB 300
  29. 290  GOTO 170
  30. 300  NV = VAL(D$)
  31. 310  IF NV <> VAL(D$+"9") THEN RETURN
  32. 320  IF LEFT$(D$,1) <> "=" THEN 350
  33. 330  MAT(EQ,SIZE+1) = VAL(MID$(D$,2))
  34. 340  GOTO 540
  35. 350  IF NV THEN 410
  36. 360  IF INSTR(D$,"0") THEN 410
  37. 370  IF LEFT$(D$,1) = "-" THEN D$ = "-1"+MID$(D$,2)
  38. 380  IF LEFT$(D$,1) = "+" THEN D$ = "+1"+MID$(D$,2)
  39. 390  IF LEFT$(D$,1) <> "-" AND LEFT$(D$,1) <> "+" THEN D$ = "+1"+D$
  40. 400  GOTO 300
  41. 410  J = 0
  42. 420  J = J + 1
  43. 430  J$ = MID$(D$,J,1)
  44. 440  IF J$ < "A" OR J$ > "Z" THEN D$ = LEFT$(D$,J-1) + MID$(D$,J+1) : GOTO 410
  45. 450  IF J < LEN(D$) THEN 420
  46. 460  PTR = 0
  47. 470  FOR J = 1 TO SIZE
  48. 480  IF PTR THEN 510
  49. 490  IF VAR$(J) = D$ THEN PTR = J
  50. 500  IF VAR$(J) = "" THEN PTR = J
  51. 510  NEXT J
  52. 520  VAR$(PTR) = D$
  53. 530  MAT(EQ,PTR) = NV
  54. 540  D$ = ""
  55. 550  RETURN
  56. 560  '
  57. 570  ' output equations
  58. 580  CLS
  59. 590  PRINT "Equations entered ..."
  60. 600  PRINT
  61. 610  FOR I = 1 TO EQ
  62. 620  IF I MOD 17 = 0 THEN GOSUB 1370
  63. 630  FOR J = 1 TO EQ
  64. 640  P$ = STR$(MAT(I,J))+" "+VAR$(J)
  65. 650  IF MAT(I,J) >= 0 AND J > 1 THEN MID$(P$,1,1) = "+"
  66. 660  PRINT "  ";P$;
  67. 670  NEXT J
  68. 680  PRINT "  = ";MAT(I,SIZE+1)
  69. 690  NEXT I
  70. 700  GOSUB 1370
  71. 710  CLS
  72. 720  LOCATE 5,1
  73. 730  EQ = 0
  74. 740  FOR I = 1 TO SIZE
  75. 750  IF VAR$(I) <> "" THEN EQ = EQ + 1
  76. 760  NEXT I
  77. 770  FOR I = 1 TO EQ
  78. 780  MAT(I,EQ+1) = MAT(I,SIZE+1)
  79. 790  NEXT I
  80. 800  FOR A = 1 TO EQ
  81. 810  PRINT TAB(22) "Working on equation ";A
  82. 820  PTR = 0
  83. 830  FOR C = A TO EQ
  84. 840  IF MAT(C,A) THEN PTR = C
  85. 850  NEXT C
  86. 860  IF PTR THEN 910
  87. 870  PRINT
  88. 880  PRINT "An infinite number of solutions exist"
  89. 890  BEEP
  90. 900  GOTO 1140
  91. 910  FOR D = 1 TO EQ + 1
  92. 920  SWAP MAT(PTR,D),MAT(A,D)
  93. 930  NEXT D
  94. 940  DENOM = MAT(A,A)
  95. 950  FOR C = 1 TO EQ + 1
  96. 960  MAT(A,C) = MAT(A,C)/DENOM
  97. 970  NEXT C
  98. 980  FOR C = 1 TO EQ
  99. 990  IF C = A THEN 1040
  100. 1000  TEMP = MAT(C,A)
  101. 1010  FOR D = 1 TO EQ + 1
  102. 1020  MAT(C,D) = MAT(C,D)-MAT(A,D)*TEMP
  103. 1030  NEXT D
  104. 1040  NEXT C,A
  105. 1050  '
  106. 1060  ' output results
  107. 1070  CLS
  108. 1080  PRINT "Results ..."
  109. 1090  PRINT
  110. 1100  FOR I = 1 TO EQ
  111. 1110  PRINT VAR$(I),MAT(I,EQ+1)
  112. 1120  IF I MOD 17 = 0 THEN GOSUB 1370
  113. 1130  NEXT I
  114. 1140  GOSUB 1370
  115. 1150  RUN
  116. 1160  '
  117. 1170  ' sub to eliminate spaces and asterisks
  118. 1180  SP = INSTR(A$," ")
  119. 1190  IF SP = 0 THEN 1220
  120. 1200  A$ = LEFT$(A$,SP-1) + MID$(A$,SP+1)
  121. 1210  GOTO 1180
  122. 1220  SP = INSTR(A$,"*")
  123. 1230  IF SP = 0 THEN 1260
  124. 1240  A$ = LEFT$(A$,SP-1) + MID$(A$,SP+1)
  125. 1250  GOTO 1220
  126. 1260  RETURN
  127. 1270  '
  128. 1280  ' sub to capitalize A$
  129. 1290  FOR CHAR = 1 TO LEN(A$)
  130. 1300  IF MID$(A$,CHAR,1) < "a" THEN 1330
  131. 1310  IF MID$(A$,CHAR,1) > "z" THEN 1330
  132. 1320  MID$(A$,CHAR,1) = CHR$(ASC(MID$(A$,CHAR,1))-32)
  133. 1330  NEXT CHAR
  134. 1340  RETURN
  135. 1350  '
  136. 1360  ' sub to wait before continuing
  137. 1370  LOCATE 25,30
  138. 1380  POKE 106,0
  139. 1390  PRINT "Press any key to continue";
  140. 1400  K$ = INKEY$
  141. 1410  IF K$ = "" THEN 1400
  142. 1420  CLS
  143. 1430  LOCATE 3,1
  144. 1440  RETURN
  145.